var gulp = require('gulp');
var RevAll = require('gulp-rev-all');
var uglify = require('gulp-uglify');
var filter = require('gulp-filter');
var csso = require('gulp-csso');
var useref = require('gulp-useref');
var del = require('del'); //删除工具
var run = require('run-sequence'); //按顺序运行插件
var sourcemaps = require('gulp-sourcemaps'); //map插件
var concat = require('gulp-concat'); //文件合并

// gulp.task('default3', function () {
//
//     var jsFilter = filter("js/*.js");
//     var cssFilter = filter("css/*.css");
//     var htmlFilter = filter('html/*.html');
//
//
//     // var revAll = new RevAll({
//     //
//     //     //不重命名文件
//     //     dontRenameFile: ['.html'] ,
//     //
//     //     //无需关联处理文件
//     //     dontGlobal: [ /^\/favicon.ico$/ ,'.bat','.txt'],
//     //
//     //     //该项配置只影响绝对路径的资源
//     //     prefix: 'http://s0.static.server.com'
//     // });
//
//     return gulp.src(['src'])
//
//     //合并html里面的js/css
//         .pipe(htmlFilter)
//         .pipe(useref())
//         .pipe(htmlFilter.restore)
//
//         //压缩js
//         .pipe(jsFilter)
//         .pipe(uglify())
//         .pipe(jsFilter.restore)
//
//         //压缩css
//         .pipe(cssFilter)
//         .pipe(csso())
//         .pipe(cssFilter.restore)
//
//         //加MD5后缀
//         .pipe(RevAll.revision())
//
//         //输出
//         .pipe(gulp.dest('dist'))
//
//         //生成映射json文件
//         .pipe(RevAll.manifestFile())
//         .pipe(gulp.dest('dist'));
// });
//
// gulp.task('watch', function () {
//     gulp.watch('src/**', ['default']);
// });
gulp.task('emptyDir', function () {
    return del(['src/dist']);
});
// gulp.task('default2', function () {
//     run('emptyDir');
//     // var jsFilter = filter("");
//     var jsFilter = filter("**/*.js");
//     var cssFilter = filter("**/*.css");
//     var htmlFilter = filter('**/*.html');
//     gulp.src(['src'])
//
//     //压缩js
//         .pipe(jsFilter)
//         .pipe(uglify())
//         .pipe(sourcemaps.init())
//         .pipe(concat('plugin.min.js'))
//         .pipe(RevAll.revision())
//         .pipe(sourcemaps.write())
//             .pipe(gulp.dest('dist'))
//         .pipe(RevAll.manifestFile())
//         .pipe(gulp.dest('dist/js'))
//     // gulp.src(['src/html/*.html'])
//     // // .pipe(jsFilter.restore)
//     // // return gulp.src('src/html/*.html')
//     //     .pipe(useref())
//     //     .pipe(RevAll.revision())
//     // //     .pipe(gulp.dest('dist'))
//     //     .pipe(RevAll.manifestFile())
//     //     .pipe(gulp.dest('dist'));
// });


gulp.task('default', function () {
    run('emptyDir','default1','default2','default3');


});
gulp.task('default1', function () {
    // Create filter instance inside task function
    const f = filter(['**', '!*src/vendor'], {restore: true});

    return gulp.src('src/**/*.js')
    // Filter a subset of the files
        .pipe(f)
        .pipe(concat('plugin.min.js'))
        // Run them through a plugin
        .pipe(uglify())
        .pipe(RevAll.revision())
        // Bring back the previously filtered out files (optional)
        .pipe(f.restore)
        .pipe(gulp.dest('dist/js'))
        .pipe(RevAll.manifestFile())
        .pipe(gulp.dest('dist/js'));

});

gulp.task('default2', function () {
    // Create filter instance inside task function
    const v = filter(['**', '!*src/vendor'], {restore: true});

    return gulp.src('src/**/*.css')
    // Filter a subset of the files
        .pipe(v)
        .pipe(concat('plugin.min.css'))
        // Run them through a plugin
        .pipe(csso())
        .pipe(RevAll.revision())
        // Bring back the previously filtered out files (optional)
        .pipe(v.restore)
        .pipe(gulp.dest('dist/css'))

        .pipe(RevAll.manifestFile())
        .pipe(gulp.dest('dist/css'));

});

gulp.task('default3', function () {
    // Create filter instance inside task function
    const s= filter(['**', '!*src/vendor'], {restore: true});
    return gulp.src('src/**/*.html')
        .pipe(useref())
        .pipe(RevAll.revision())
        .pipe(s.restore)
        .pipe(gulp.dest('dist'))

        // Bring back the previously filtered out files (optional)
        .pipe(RevAll.manifestFile())
        .pipe(gulp.dest('dist/html'));

});